import { ExtractPropTypes } from 'vue'
import { ZIndex } from '../../config'
import { TuniaoType } from '../../types/tuniao-ui'
import { validatorSizeValue } from '../../utils'

/**
 * 提示框显示位置有效值
 */
const TipsPositions = ['top', 'center', 'bottom'] as const
export type TipsPosition = typeof TipsPositions[number]

/**
 * tips提示配置类型
 */
export type TipsOption = {
  /** toast关闭时间 */
  duration?: number,
  /** 消息内容 */
  msg?: string,
  /** 背景颜色 */
  bgColor?: string,
  /** 字体颜色 */
  color?: string,
  /** 消息类型 */
  type?: TuniaoType
}

/**
 * props参数
 */
export const tipsProps = {
  /** zIndex */
  zIndex: {
    type: [String, Number],
    default: ZIndex.tips
  },
  /** 提示框显示的位置 */
  position: {
    type: String,
    default: 'top',
    validator: (value: TipsPosition) => {
      return TipsPositions.includes(value)
    }
  },
  /** 距离顶部的距离, 当设置为top时有效, 防止被自定义顶栏遮挡 */
  top: {
    type: [String, Number],
    default: '',
    validator: (value: string | number) => {
      return validatorSizeValue(value)
    }
  }
}
export type TipsProps = ExtractPropTypes<typeof tipsProps>

export const tipsEmits = {
  /** 关闭提示 */
  closed: () => true
}
export type TipsEmits = typeof tipsEmits
